// 一个非常经典的随机需求，变相利用了洗牌算法
// 例如：存在一个已知区间，怎样随机的从里面选择 X 个数？要求这随机挑选的X个数不能重复
// 实际上也是一个变相的洗牌算法，可以将原需求转换为：
// 1. 先将原区间用洗牌算法打乱
// 2. 再从中挑选X个元素返回
import { shuffle } from './洗牌算法';

export function getRandomNum(start: number, end: number, generateCount: number) {
    // 安全检测
    if (end < start) {
        console.trace();
        throw new Error('输入的区间值不合理');
    }
    // 初始化数组
    const nums = new Array(end - start + 1);
    for (let i = start; i <= end; i++) {
        nums[i - start] = i;
    }
    // 调用洗牌算法
    shuffle(nums);
    // 返回生成元素
    return nums.slice(0, generateCount);
}


// 测试用例
console.log(getRandomNum(0, 100, 50));
console.log(getRandomNum(1000, 1100, 4));
console.log(getRandomNum(50, 100, 49));